package basic50.fortieth;

public class Basic32 {
    public static void main(String[] args) {
        // 题目：取一个整数a从右端开始的4～7位。
        // 程序分析：可以这样考虑：
        //     (1)先使a右移4位。
        //  (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
        //    (3)将上面二者进行&运算。
        int a = 0b101011110101; // 示例整数，二进制表示为 101011110101
        int result = extractBinaryDigits(a);
        System.out.println("从右端开始的第4到第7位的二进制数是: " + Integer.toBinaryString(result));
    }
    public static int extractBinaryDigits(int a) {
        // 右移4位
        a >>>= 4; // 000010101111
        // 按位与操作，提取最低4位
        System.out.println("右移4位的a =  " + Integer.toBinaryString(a));
        int i = ~(~0 << 4); // 000000001111
        System.out.println("i = "+Integer.toBinaryString(i));
        //  000010101111
        //  000000001111
        // &运算 同为1才为1 否则为0 -> 000000001111
        // |运算  有1就为1
        // ^运算 相同为0 不同为1
        return a & i;
    }
}
